home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
World of Mac
/
World_Of_Mac_1994.iso
/
MacCD
/
Communication
/
DialScript
/
DialScript 1.7.1 Doc
/
DialScript 1.7.1 Doc.rsrc
/
TEXT_130.txt
< prev
next >
Wrap
Text File
|
1994-03-08
|
7KB
|
183 lines
A Complex Script, Explained
The following pages contain an example of a well-written and robust script.
This script uses most of DialScript's important features and is excessively commented in order to explain them.
-- Comments start with --.
-- To use 1200 bps, remove the "send break", and set speed to 1200
-- The script gets the modem's attention and dial, even if it has
-- to hang up to do it. It uses timeouts to recover from problems.
-- Problems after connect are assumed to be due to line noise, so it
-- hangs up and dials again in hope of a cleaner line. It assumes
-- a Hayes type modem set for English commands and responses.
-- You must set the variable for your username in state init and fix up
-- state FinishUp (optional).
script cs -- scripts must begin with the word "script" and a name.
-- Keywords like script must be in lower case.
-- Execution begins with the first state in the file. In this case,
-- the state named init. Every state must have a unique name.
-- Identifiers (names) in DialScript are sequences of any
-- length of letters, digits, and underscore characters. They
-- must begin with a letter.
state init
-- Display statements display characters on the terminal window
-- without sending them. Use it for user messages. The variable
-- date contains the current date and time. A newline is not
-- automatically included. Hence the display "\r" at the end.
display "Beginning UT CS login script on\r";
display date;
display "\r"; -- <-- Don't forget semicolons after statements.
set port modem; -- The set statement is used to set communication
set speed 2400; -- parameters. These values are the defaults, so
set databits 8; -- these statements are not really necessary.
set online on; -- Be sure DialScript is online so that it will
-- talk to the serial port. This is also
-- the default.
-- setvar is used to give variables values. All variables hold
-- string values, never numbers, i.e. "67" not 67.
-- Use variables to hold parameters that you may wish to change
-- later.
setvar USERNAME "newton\r"; -- You must change this, of course.
setvar PHONE "ATDT4718454\r"; -- It's MY username, not yours.
setvar Modem_Escape_String "+++"; -- Some people change this.
-- input prompts the user for a value for a variable. The noecho
-- keyword causes what the user types to not be displayed. Good
-- for passwords.
input PASSWORD noecho; -- You could use a setvar here.
next "ModemReady"; -- Branch to the state named ModemReady.
end; -- init
-- This state makes sure we have the (Hayes-type) modem's attention.
-- It sends a carriage return to it and expects it to reply with OK.
state ModemReady
-- The repeat statement executes the statements before its
-- end a fixed number of times, twice in this case.
repeat 2
-- send sends characters out over the serial port. Note that
-- carriage return is not included automatically. Use
-- \r for a carriage return.
send "\r"; send "AT\r";
-- select waits for one of several conditions.
select
"OK": next "Dial"; -- If OK is received, go to state Dial.
timeout 3: -- If 3 seconds pass without a match,
-- display a message and exit the select.
display "ModemReady timeout!\r";
end; -- select
end; -- repeat
-- If we get here, the select has timed out in both
-- iterations of the repeat. The modem is not responding.
-- Try hanging up.
next "HangUp"; -- failed again, maybe hangup
end; -- ModemReady
-- The state hangs up a Hayes modem by sending +++, waiting for OK,
-- and then sending ATH.
state HangUp
repeat 2
-- Note that send pauses for one second before sending.
-- The delay does nothing for 1 second to give an even greater
-- pause before sending the escape string.
delay 1; send Modem_Escape_String;
select
"OK" : send "ATH\r"; next "ModemReady";
timeout 3 : display "HangUp timeout!\r";
end;
end;
-- If we reach this point, we have not received the ack for the
-- escape string. We are confused and so try hanging up.
-- Control really should not reach this point.
send "\r"; send "ATH\r";
next "ModemReady";
end; -- HangUp
-- This state dials the phone number and awaits the CONNECT message.
-- The select causes a redial if the line is busy, the modem responds
-- with NO CARRIER, or the modem does not respond with 25 seconds.
state Dial
send PHONE; -- The system's phone number
select
"CONNECT" : next "GotIt";
"BUSY" : next "ModemReady";
"NO CARRIER" : next "ModemReady";
timeout 25 : display "Dial timeout!\r"; next "ModemReady";
end;
end; -- Dial
-- This state enters the username and the password in reponse to
-- the appropriate prompts. If there is no prompt within 60 seconds,
-- the script hangs up and redials.
state GotIt
-- Here is a trick. The machine we are calling requires
-- that we send a break in order to switch to 2400 baud and prompt
-- for login. The delay 1 gives a little time between the modem
-- connect and sending the break. It is probably not necessary.
delay 1;
send break; -- UNIX host needs a break to switch to 2400 baud
select
"login:" : send USERNAME;
timeout 60 : display "login timeout!\r"; next "HangUp";
end;
select
"Password:" : send PASSWORD; send "\r"; -- Your password
timeout 60 : display "password timeout!\r"; next "HangUp";
end;
next "FinishUp";
end; -- GotIt
-- This state is used to answer the terminal type prompt. The nature
-- of this prompt depends on your .login file on UNIX. You need to
-- to customize this state for your circumstances. I enter return
-- to confirm that I will use a vt100 emulator and then switch to
-- the emulator I use (MacLayers) by means of the transfer.
-- "RunLayers" is my settings file for MacLayers. This script has
-- to be in the same folder as MacLayers and RunLayers in order
-- for the transfer to succeed. The transfer quits DialScript and
-- runs MacLayers with settings file RunLayers (as though I
-- had double clicked on RunLayers from the finder).
state FinishUp -- You need to customize this. What's here is weak.
-- wait "(vt100)"; -- Terminal type prompt
-- send "\r"; -- Yes to vt100
-- transfer "MacLayers" "RunLayers"; -- Run real term emulator
end; -- FinishUp
-- FInally, the script ends with "end;"
end; -- cs